/*
 * MenuClientTestImpl.java
 *
 * Created on 6 décembre 2008, 13:58
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package org.projetjava.server;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import fr.unice.miage.projetjava.entities.Commande;
import fr.unice.miage.projetjava.entities.LigneDeCommande;
import fr.unice.miage.projetjava.entities.LigneDePanier;
import fr.unice.miage.projetjava.entities.Produit;
import fr.unice.miage.projetjava.managers.GestionnaireDUserLocal;
import fr.unice.miage.projetjava.managers.GestionnaireDeCommandeLocal;
import fr.unice.miage.projetjava.entities.Users;
import fr.unice.miage.projetjava.managers.GestionnaireDeLigneDeCommandeLocal;
import fr.unice.miage.projetjava.managers.GestionnaireDePanierLocal;
import fr.unice.miage.projetjava.managers.GestionnaireDeProduitLocal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import javax.ejb.EJB;
import javax.servlet.http.HttpSession;
import org.projetjava.client.MenuClientTest;

/**
 *
 * @author Olivier
 */
public class MenuClientTestImpl extends RemoteServiceServlet implements
        MenuClientTest {
    @EJB
    private GestionnaireDeProduitLocal gestionnaireDeProduitBean;
    @EJB
    private GestionnaireDePanierLocal gestionnaireDePanierBean;
    @EJB
    private GestionnaireDeLigneDeCommandeLocal gestionnaireDeLigneDeCommandeBean;
    @EJB
    private GestionnaireDeCommandeLocal gestionnaireDeCommandeBean;
    @EJB
    private GestionnaireDUserLocal gestionnaireDUserBean;

    HttpSession session = null;
    Users userSession = null;
    Collection<LigneDePanier> panierSession = null;
    
    public Users connexionUser(String login, String pwd)
    {
        Users user = null;
        try
        {
            user = gestionnaireDUserBean.verifyUser(login, pwd);
            if(user.equals(null))
            {
                return null;
            }
            else
            {
                userSession = new Users();
                userSession.setId(user.getId());
                userSession.setAddress1(user.getAddress1());
                userSession.setAddress2(user.getAddress2());
                userSession.setEmail(user.getEmail());
                userSession.setFirstName(user.getFirstName());
                userSession.setLastName(user.getLastName());
                userSession.setLogin(user.getLogin());
                userSession.setPassword(user.getPostalCode());
                userSession.setPostalCode(user.getPostalCode());
                session = this.getThreadLocalRequest().getSession();
                session.setAttribute("user", userSession);
                panierSession = gestionnaireDePanierBean.getListeldp();
                session.setAttribute("panier", panierSession);
                return userSession;
            }
        }
        catch(NullPointerException npe)
        {
            npe.printStackTrace();
            return null;
        }
    }

    public Collection<Commande> commandeUser(Users user) {
        try
        {
            Collection<Commande> listCommande = gestionnaireDeCommandeBean.listeDeCommande(user);
            session.setAttribute("listCommande", listCommande);
            return listCommande;
        }  catch(NullPointerException npe)
        {
            npe.printStackTrace();
            return null;
        }
    }

    public void deconnexionUser() {
        userSession = null;
        session.setAttribute("client", null);
    }

    public void inscriptionUser(String last, String first, String log, String pass, String add1, String add2, String postal, String mail) {
        userSession = gestionnaireDUserBean.createUser(first, last, log, pass, add1, add2, postal, mail);
        session.setAttribute("user", userSession);
    }

    public Collection<LigneDePanier> updatePanier() {
        try {
            panierSession = gestionnaireDePanierBean.getListeldp();
            session.setAttribute("panier", panierSession);
            return panierSession;
        } catch (NullPointerException npe) {
            npe.printStackTrace();
            return null;
        }
    }

    public Collection<LigneDePanier> voirPanier() {
        try
        {
            Collection<LigneDePanier> listPanier = gestionnaireDePanierBean.getListeldp();
            if(listPanier.equals(null))
            {
                return null;
            }
            else
            {
                session.setAttribute("listPanier", listPanier);
                return listPanier;
            }
        }
        catch (NullPointerException npe)
        {
            npe.printStackTrace();
            return null;
        }

    }

    public void finishOrder()
    {
        Date date = new Date();
        Commande commande = gestionnaireDeCommandeBean.newCommande(userSession, date);
        Collection<LigneDePanier> listPanier = (Collection<LigneDePanier>) session.getAttribute("listPanier");
        for(LigneDePanier lp : listPanier)
        {
            LigneDeCommande ldc = new LigneDeCommande();
            ldc.setCommande(commande);
            ldc.setProd(lp.getProd());
            ldc.setQteProd(lp.getQuantite());
            ldc.setPrixUnit(lp.getProd().getProduct_price());
            commande.ajouterLigneDeCommande(ldc);
        }
    }

    public void ajouterProduit(Produit p)
    {
        LigneDePanier ldp = new LigneDePanier(p, 1);
        if(panierSession.equals(null))
        {
            panierSession = gestionnaireDePanierBean.getListeldp();
            panierSession.add(ldp);
        }
        else
        {
            panierSession.add(ldp);
        }
    }

    public Collection<Produit> affichageProduit() {
        Collection<Produit> listProd = null;
        try
        {
            listProd = gestionnaireDeProduitBean.listeDeProduit();
            if(listProd.equals(null))
            {
                return null;
            }
            else
            {
                return listProd;
            }
        } catch(NullPointerException npe)
        {
            npe.printStackTrace();
            return null;
        }
    }
}
